JAMES WEB

Aprenda como se faz.


Sumário

Produtos CRUD (Deletar)

Este capítulo explora o processo de exclusão de produtos em nosso sistema de e-commerce. Ao clicar em “Excluir”, o sistema ativa a rota /admin/products_delete/:idproduct, no arquivo admin-products.php. Esta rota, via método GET, recebe o ID do produto, verifica a autenticação do usuário e, através da função delete() no arquivo Products.php, remove o produto do banco de dados. A função delete() usa SQL para deletar o produto, prevenindo injeções de SQL. Este capítulo detalha cada etapa, desde a rota até a exclusão no banco de dados, garantindo a integridade do sistema.

delete-produtos

Deletando um produto

O processo de deletar um produto é muito simples. Ele é acionado quendo clicamos no botão ‘Excluir’ em uma linha de um produto na página lista de produtos na página administrativa. Ele nos leva a rota ‘/admin/products_delete/:idproduct’ inserido no código admin.products.php.

PHP: admin-products.php (rota ‘/admin/products_delete/:idproduct’)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/// início do código
 
//Rota Excluir Produtos- Template products-update.html
$app->get('/admin/products_delete/:idproduct'function($idproduct) { 
    User::verifyLogin(); 
    $product new Product(); 
    $product->get((int)$idproduct);   
    $product->delete(); 
    header("Location: /ecommerce/admin/products");
    exit;
  });
 
// restodo código
?>  

Em suma, este trecho de código define uma rota que recebe o ID de um produto via GET, verifica a autenticação do usuário, recupera os dados do produto do banco de dados, remove o produto do banco de dados e redireciona o usuário para a lista de produtos.

Veja a explicação linha por linha:

  • L4: $app->get(‘/admin/products_delete/:idproduct’, function($idproduct) {
    Esta linha inicia a definição de uma rota no aplicativo web.
    • $app->get(): indica que esta rota responde a requisições HTTP do tipo GET. Este tipo de requisição é comumente usado para solicitar dados do servidor.
    • ‘/admin/products_delete/:idproduct’: define o caminho da rota. :idproduct é um parâmetro dinâmico, ou seja, pode variar dependendo do ID do produto que está sendo processado.
    • function($idproduct) {: inicia uma função anônima que será executada quando a rota for acessada. $idproduct é o parâmetro que recebe o valor dinâmico do ID do produto.
  • L5: User::verifyLogin();
    Esta linha chama um método estático verifyLogin() da classe User. Este método tem a responsabilidade de verificar se o usuário está autenticado e tem permissão para acessar esta rota. Trata-se de uma medida de segurança essencial para proteger áreas administrativas do sistema.
  • L6: $product = new Product();
    Aqui, um novo objeto da classe Product é instanciado. A classe Product representa um produto no sistema e contém os atributos e métodos necessários para manipular os dados do produto.
  • L7: $product->get((int)$idproduct);
    Este trecho chama o método get() do objeto $product, passando o $idproduct como argumento. O (int) garante que o $idproduct seja convertido para um número inteiro, prevenindo erros. O método get() recupera os dados do produto correspondente ao $idproduct do banco de dados e os armazena no objeto $product.
  • L8: $product->delete();
    Este trecho invoca o método delete() do objeto $product. delete() remove o produto correspondente do banco de dados.
  • L9: header(“Location: /ecommerce/admin/products”);
    Esta linha redireciona o usuário para a página /ecommerce/admin/products. Após a exclusão do produto, o usuário é redirecionado para a lista de produtos.
  • L10: exit;
    A função exit encerra a execução do script. Esta linha garante que nenhum código adicional seja executado após o redirecionamento.

Função delete()

Na linha 8 do arquivo admin-produtcs.php da rota ‘/admin/products_delete/:idproduct’ temos a cham,ada da função delete(). Ela deve ser reproduzida no arquivo Products.php conforme exemplificado abaixo:

PHP: Products.php (Funçao delete())

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/// início do código
 
public function delete()
    {
        $sql new Sql();
        $sql->query("DELETE FROM tb_products WHERE idproduct = :idproduct", [
            ':idproduct' => $this->getidproduct()
        ]);
    }
 
// restodo código
?>  

A função delete() cria uma instância da classe Sql para interagir com o banco de dados. Em seguida, ela executa uma consulta SQL DELETE para remover um produto da tabela tb_products, usando o ID do produto obtido através do método getidproduct() para identificar o registro a ser removido. A consulta utiliza um marcador de parâmetro para evitar ataques de injeção de SQL.

Veja como ela funciona linha por linha:

  • L4: public function delete()
    Esta linha define uma função pública chamada delete() dentro da classe Product. Esta função é responsável por remover um produto do banco de dados.
  • L5: {
    Início do bloco de código da função.
  • L5: $sql = new Sql();
    Esta linha instancia um novo objeto da classe Sql. Assumimos que a classe Sql é responsável por interagir com o banco de dados.
  • L6-L9: $sql->query(“DELETE FROM tb_products WHERE idproduct = :idproduct”, [ ‘:idproduct’ => $this->getidproduct() ]);
    Esta linha executa uma consulta SQL para remover um registro da tabela tb_products.
    • $sql->query(): é um método da classe Sql que executa uma consulta SQL.
    • “DELETE FROM tb_products WHERE idproduct = :idproduct” :é a consulta SQL que será executada.
    • DELETE FROM tb_products: :Indica que registros serão removidos da tabela tb_products.
    • WHERE idproduct = :idproduct:: Especifica a condição para a remoção. Apenas o registro onde a coluna idproduct corresponde ao valor :idproduct será removido.
    • :idproduct:: É um marcador de parâmetro, usado para prevenir injeção de SQL.
    • [ ‘:idproduct’ => $this->getidproduct() ]: é um array associativo que fornece o valor para o marcador de parâmetro :idproduct.
    • ‘:idproduct’: :A chave do array corresponde ao marcador de parâmetro na consulta SQL.
    • $this->getidproduct(): :O valor do array é obtido chamando o método getidproduct() do objeto atual ($this). Assumimos que este método retorna o ID do produto que será removido.
  • L8: }
    Fim do bloco de código da função.

Para Saber Mais…

  • getidproduct()
  • verifyLogin()
  • get((int)$idproduct)